/**
 * Clase para filtrar los planes
 */ 
qx.Class.define("mutual.filterPlanes", {
			extend : mutual.filter,
			/** 
			 * @param (int) maxDisplay: Máximo nº de registros a sugerir en la búsqueda
			 * @param (delegate) fnSelected: Puntero a la función ejecute luego de cambiar el contenido de la búsqueda
			 */
			construct : function(maxDisplay, fnSelected) {
				this.fnSelected = fnSelected;
				this.base(arguments);
				this.setLayout(new qx.ui.layout.HBox(5));
				
				this.combo = new qx.ui.form.ComboBox();
				this.combo.setWidth(250);
				
				// cargamos el json con los datos  a proponer
				this.json = new Array(); 
				var planes = this.getPlanes();
				for (var i=0; i < planes.length; i++){
//					this.json[i] = {
//								idPlan: parseInt(planes[i].id_plan),
//								descripcion: planes[i].nombre + " - " + planes[i].nombre_seguro
//							  };
					this.combo.add(new qx.ui.form.ListItem(
						planes[i].nombre + " - " + planes[i].nombre_seguro, "",
						planes[i].idPlan));
				}
				// Definimos el botón que dispará el abm de planes
				var btnAbm = new qx.ui.form.Button("","mutual/newPlan.png").set({width: 17});
				btnAbm.addListener("execute", function(){
					alert("abriría el abm de planes");
				}, this);
				// instanciamos el combo y le definimos la función que ejecutará cuando se dispare el evento 'input' de su textfield
				
				this.combo.getChildControl("textfield").addListener("input",
						function(e) {
//							this.combo.getChildControl("list").removeAll();
							this.combo.getChildControl("list").resetSelection();

//							if (e.getData() !== "") {
								var find = new RegExp(e.getData(), "i");
//								var j = 0;
//								for (i = 0; i < this.json.length; i++) {
//									if ((this.json[i].idPlan.toString().search(find) != -1) || // Busca en la parte de Dni
//										(this.json[i].descripcion.toString().search(find) != -1)) { // Busca en la parte de Nombre
//										this.combo.add(new qx.ui.form.ListItem(
//												this.json[i].descripcion, "",
//												this.json[i].idPlan));
//										j++;
//									}
//									if (j == maxDisplay)
//										break;
//								}
								for(var i in this.combo.getChildControl("list").getChildren()) {
									if (this.combo.getChildControl("list").getChildren()[i].getLabel().search(find) != -1) {
										this.combo.getChildControl("list").getChildren()[i].setVisibility("visible");
									}
								  	else
								  		this.combo.getChildControl("list").getChildren()[i].setVisibility("excluded");
								}
								this.combo.open();
								find = null;
//							}
						}, this);
						
				// seteamos el puntero a la función que ejecutará cuando cambie el contenido de la búsqueda
				this.combo.addListener("changeValue", function(e){
					this.fnSelected();
				}, this)
				
				// Agregamos el combo
				var lblPlanes = new qx.ui.basic.Label("Plan");
				this.add(lblPlanes);
				this.add(this.combo);
				this.add(btnAbm);
			},
			
			members : {
				/**
				 * Obtiene un array con los planes solicitados al server
				 * 
				 * @return (Array) planes
				 */
				getPlanes : function() {
					var rpc = new qx.io.remote.Rpc("services/", "mutual.Plan");
					var planes = rpc.callSync("getPlanes");
					return planes;
				},
				/**
				 * Muestra en el combo el plan especificado 
				 * 
				 * @param (int) idPlan: Id del plan que se desea mostrar en el combo
				 */
				setPlan : function(idPlan){
					 if (idPlan) {
		                for(var i in this.json) { 
		                    if (this.json[i].idPlan === idPlan) {
		                        this.combo.getChildControl("list").removeAll(); 
		                        this.combo.add(new qx.ui.form.ListItem(this.json[i].descripcion, "", this.json[i].idPlan)); 
		                        break; 
		                    }
		                }
		                this.combo.getChildControl("list").setModelSelection([idPlan]);
		            } else {
		                this.combo.getChildControl("textfield").setValue(idPlan);
		                this.combo.getChildControl("list").resetSelection();
		            }
				},
				/**
				 * Obtiene el plan especificado
				 * 
				 * @param (int) idPlan: Id de Plan que se desea recuperar
				 * 
				 * @return (json object) plan
				 */		
				getPlan : function(idPlan){
					var rpc = new qx.io.remote.Rpc("services/", "mutual.Plan");
					var plan = rpc.callSync("getPlan", idPlan);
					return plan;
				}
			}
});
